package com.zmn.oms.third.zhimi.api;

import lombok.Data;

import java.util.List;

/**
 * 类描述：
 *
 * @author lhl
 * @date 2020/04/27 21:51
 */
public class ZhimiSyncOrderCompleteReq {

    /**
     * 服务类型为“安装”时的数据格式
     */
    @Data
    public static class Install {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * SN码，必填
         */
        private String sn;
        /**
         * 物料编码，必填
         */
        private String productcode;
        /**
         * 安装图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 备注，非必填
         */
        private String remark;
        /**
         * 额外收费项目，非必填
         */
        private String extendfee;
        /**
         * 收费金额，非必填
         */
        private String chargeamount;
    }

    /**
     * 服务类型为“维修”时的数据格式
     */
    @Data
    public static class Repair {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * SN码，必填
         */
        private String sn;
        /**
         * 物料编码，必填
         */
        private String productcode;
        /**
         * 维修图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 保修类型 1：包内，2：保外 必填
         */
        private Integer warranty;
        /**
         * 保外原因 非必填
         *  1：外观损伤:2：进液；3：自然灾害；4:非智米授权维修；5:人为损坏；6:序列号贴纸损坏；
         *  7:无安装记录；8:购买日期超保；9:附件损坏；10:非产品故障收费处理
         */
        private String reasonswarranty;
        /**
         * 故障
         */
        private List<Fault> faultLines;
        /**
         * 备件
         */
        private List<Part> partlines;
        /**
         * 是否有购机凭证，必填
         */
        private Boolean isexistcertificate;
        /**
         * 购买日期，格式：yyyy-MM-dd 非必填
         */
        private String buydate;
        /**
         * 备注，非必填
         */
        private String remark;
        /**
         * 物流单号
         */
        private String receivenumber;
        /**
         * 物流公司
         */
        private String receivetransfer;
        /**
         * 寄回时间
         */
        private String receivietime;
    }

    /**
     * 服务类型为“勘测”时的数据格式
     */
    @Data
    public static class Survey {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * 勘测图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 是否满足安装条件 必填
         */
        private Integer isinstallationok;
        /**
         * 不满足安装原因 必填
         */
        private String reason;
        /**
         * 有无电源 非必填
         */
        private Integer power;
        /**
         * 有无WIFI 非必填
         */
        private String wifi;
        /**
         * 污染源情况 非必填
         */
        private String pollution;
        /**
         * 安装方式 非必填
         */
        private String installationmode;
        /**
         * 备注，非必填
         */
        private String remark;
    }

    /**
     * 服务类型为“检测”时的数据格式
     */
    @Data
    public static class Detection {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * SN码，必填
         */
        private String sn;
        /**
         * 物料编码，必填
         */
        private String productcode;
        /**
         * 勘测图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 检测结果 必填
         */
        private String detectionresult;
        /**
         * 详细类别 值必填为4或5，4代表DAP，5代表DOA，如果没有回传此字段，或者值不对，报错
         */
        private Integer returnorexchange;
        /**
         * 故障
         */
        private List<Fault> faultLines;
    }

    /**
     * 服务类型为“退机”时的数据格式
     */
    @Data
    public static class Retund {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * SN码，必填
         */
        private String sn;
        /**
         * 物料编码，必填
         */
        private String productcode;
        /**
         * 物流公司
         */
        private String receivetransfer;
        /**
         * 物流单号
         */
        private String receivenumber;
        /**
         * 寄回时间
         */
        private String receivietime;
        /**
         * 勘测图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 退货类型 非必填
         *  7天无理由；质量问题；发错货退货
         */
        private Integer returntpe;
        /**
         * 故障
         */
        private List<Fault> faultLines;
        /**
         * 备注，非必填
         */
        private String remark;
    }

    /**
     * 服务类型为“换机”时的数据格式
     */
    @Data
    public static class Exchange {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测
         */
        private Integer servicetype;
        /**
         * SN码，必填
         */
        private String sn;
        /**
         * 物料编码，必填
         */
        private String productcode;
        /**
         * 物流公司
         */
        private String receivetransfer;
        /**
         * 物流单号
         */
        private String receivenumber;
        /**
         * 寄回时间
         */
        private String receivietime;
        /**
         * 新设备SN码，必填
         */
        private String newsn;
        /**
         * 新物料编码，必填
         */
        private String newproductcode;
        /**
         * 勘测图片，以","分隔，三张以上以";"分隔。必填
         */
        private String uploadpics;
        /**
         * 换机类型 必填
         *  1：DAP；2：DOA；3：多维换机
         */
        private Integer replacementtype;
        /**
         * 故障 必填
         */
        private List<Fault> faultLines;
        /**
         * 购买日期，格式：yyyy-MM-dd 非必填
         */
        private String buydate;
        /**
         * 备注，非必填
         */
        private String remark;
    }

    /**
     * 服务类型为“取消”时的数据格式
     */
    @Data
    public static class Cancel {
        /**
         * 服务单号，必填
         */
        private String name;
        /**
         * 服务类型，必填 取消固定使用"99"
         */
        private Integer servicetype;
        /**
         * 取消原因类型 必填
         *  1：未发现故障
         *  2：非智米品牌
         *  3：电话联系不上
         *  4：顾客无时间7天以上
         *  5：顾客拒修
         *  6：费用高不修
         *  7：配送型号和购买型号不符
         *  8：重复、错误登记
         *  9：重新派单分配
         *  10：顾客自己解决
         *  11：电话指导
         *  12：因顾客家中条件问题不能安装调试
         *  13：产品破损
         *  14：无覆盖（找不到服务商）
         *  15：重复错误登记（苏宁报单）
         *  16：重复错误登记（京东自营报单）
         *  17：顾客要求（退货）
         *  18：经销商处理（开箱不良）
         *  19：其它
         */
        private Integer reasontype;
    }

    /**
     * 故障描述
     */
    @Data
    public static class Fault {
        /**
         * 故障编码，必填
         */
        private String faultcode;
        /**
         * 故障名称，必填
         */
        private String faultname;
    }

    /**
     * 备件描述
     */
    @Data
    public static class Part {
        /**
         * 备件编码，必填
         */
        private String partcode;
        /**
         * 备件名称，必填
         */
        private String partname;
        /**
         * 新备件SN码，非必填
         */
        private String newsn;
        /**
         * 旧备件编码，必填
         */
        private String oldpartcode;
        /**
         * 旧备件名称，必填
         */
        private String oldpartname;
        /**
         * 旧备件SN码，非必填
         */
        private String oldsn;
        /**
         * 数量，必填，默认为1
         */
        private Integer qty;
        /**
         * 非用料维修方法：清洁、升级、添加润滑油。 非必填；
         * 如果该字段有值，其他字段均可以为空
         */
        private String repairmethod;
    }
}
